Pyinstaller打包PyQt5的一些坑(库缺失、移植出错) 您所在的位置:网站首页 win10无法加载dll 找不到指定的模块 Pyinstaller打包PyQt5的一些坑(库缺失、移植出错)

Pyinstaller打包PyQt5的一些坑(库缺失、移植出错)

2023-12-30 16:57| 来源: 网络整理| 查看: 265

Pyinstaller打包PyQt5的一些坑 终极打包方案(缺失库、移植出错) 背景具体问题和解决方案

背景

最近女朋友有个需要批量处理word的工作,为了方便,我用Python3+PyQt5写了个批量处理的程序,写完打包好后,运行程序出现了各种各样的错误。这里要感谢一位好心前辈给链接,给了我解决问题的思路。

这里放上链接https://zhuanlan.zhihu.com/p/26527374.

不建议用pyinstaller的命令打包,本文是用pyinstaller和.spec格式文件打包,spec文件,是每次用命令打包时都会自动生成的一个打包配置文件,我们需要修改里面的信息后再打包。

具体问题和解决方案

在我这个案例当中,我大体上遇到两个问题,一个是PyQt5的某些文件或库缺失,另一个是移植到别的电脑上时出现缺失api-ms-win-crt-xxxx-xx-x-x.dll的问题

在第一次打包的时候,出现了找不到Qt5Widgets.dll等Qt5xxx.dll库的警告,生成的exe文件也运行不了,经过百度寻找解决方法,有说法是要把目录Python3.5.3\Lib\site-packages\PyQt5\Qt\bin和Python3.5.3\Lib\site-packages\PyQt5\Qt\plugins添加到PATH环境变量,但我添加了环境变量后仍然出现这个警告。 打包时出现的错误 在看了前辈给的链接后,我有了解决思路。我用sublime text打开pyinstaller打包时生成的spec格式文件 在这里插入图片描述 打开后的内容如下,注意观察保存了路径的列表pathex。

# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['DocumentIntegrator.py'], pathex=['D:\\Python Files\\PyCharm_Project\\DocumentArrangement'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='DocumentIntegrator', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False , icon='Resources\\Icon.ico')

然后把PyQt5相关的几个目录添加进去pathex列表中,为了保险起见,我把3个目录都粘贴上去,注意这里的目录分隔符一定要用\\,如下:

pathex=['D:\\Python Files\\PyCharm_Project\\DocumentArrangement', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\bin', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\plugins'],

然后把pyinstaller打包时生成的dist和build文件夹删掉,只留下.spec格式的文件。打开命令行,进入到当前要打包的目录下,输入命令:pyinstaller -F 文件名.spec,我这里是:

pyinstaller -F DocumentIntegrator.spec

再次打包,没有上述警告了,但是运行程序时出现了以下错误提示 提示需要 于是我再次百度,找到了解决方法。 打开目录Python3.5.3\Lib\site-packages\PyQt5\Qt\plugins,把该目录下的platforms文件夹复制到生成的程序所在的目录下,比如我这里是: 复制platforms文件夹到程序所在的目录 (PS:按道理说,把路径Python3.5.3\Lib\site-packages\PyQt5\Qt\plugins\platforms添加到pathex中应该也可以的,但经检验不可行…)

到这里该问题就解决了,程序在本机上能运行,但当我把程序发给女友的时候,在她的电脑上却运行出错,她的系统是Win8.1(没错就是这么落后,我会找机会帮她重装系统的…)

出现的错误提示截图如下: 当把程序移植到别的系统时(如Win8.1),运行则出现图中的错误提示 有了前面的思路,我的想法是,能不能把api-ms-win-crt-xxx-xx-x-x.dll等一类的库文件也添加到.spec文件里的pathex列表中呢?事实证明这种方法是可行的。

于是我打开了这些库文件所在的目录,我用的Win10,路径是 C:\Windows\System32\downlevel,其他系统建议搜索一下定位到相应目录。

为了保险起见,我把该路径也添加到环境变量中,同时也添加到pathex列表中:

pathex=['D:\\Python Files\\PyCharm_Project\\DocumentArrangement', 'C:\\Windows\\System32\\downlevel', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\bin', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\plugins'],

再打包,发给女友,诶程序能运行了,开心O(∩_∩)O 程序能运行啦 完整的.spec文件内容如下,噢对咯,别忘了设置图标,在下面的icon变量里:

# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['DocumentIntegrator.py'], pathex=['D:\\Python Files\\PyCharm_Project\\DocumentArrangement', 'C:\\Windows\\System32\\downlevel', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\bin', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\plugins\\platforms', 'C:\\Softwares\\Programs\\Python3.5.3\\Lib\\site-packages\\PyQt5\\Qt\\plugins'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='DocumentIntegrator', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False , icon='Resources\\Icon.ico')


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有